﻿/*********************************************************************
 * Nombre: Principal.cs
 * Descripción: Clase del dialogo principal.
 * Autor: DRD
 * Modificaciones:
 * ******************************************************************/
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;


namespace BXPI
{
    public partial class MainWindow : Form
    {
        private string direccionTxt;//Cadena de texto para almacenar la dirección introducida
        private string pagina;      //Cadena de texto para almacenar la página
        private string cadenaDis;   //Cadena discriminatoria
        private string tipoIny;     //Cadena para distinguir el tipo de entrecomillado
        private List<Parser.formulario> ListaForms = new List<Parser.formulario>();
        CargaPagina PaginaCargada = new CargaPagina();
        CodigoHtml VentanaHtml;
        TratarListaParams VentanaConfig;
        XmlWriter EscritorXml;
        ConfigurarCharset.configCharset configCharset;
        Inyeccion Inyeccion;
        LogForm VentanaLog = new LogForm();
        private void MainWindow_Load(object sender, EventArgs e)
        {
            EscritorXml = new XmlWriter(this);
        }

        public MainWindow()
        {
            InitializeComponent();
        }

        /// <summary>
        /// Evento que salta al pulsar el botón Cargar página
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void cargarDireccion_Click(object sender, EventArgs e)
        {
            direccionTxt = direccion.Text;
            if (VentanaConfig != null) 
            {
                VentanaConfig.Close();
                VentanaConfig = null;
            }
            if (PaginaCargada.ValidaPagina(direccionTxt))
            {
                pagina = PaginaCargada.Conecta();
                if (pagina.StartsWith("Error abriendo la página "))
                {
                    MessageBox.Show(pagina,"Error en dirección", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    mostrarHtmlBtn.Enabled = false;
                    configuraciónToolStripMenuItem.Enabled = false;
                    paramsBtn.Enabled = false;
                }
                else {
                    mostrarHtmlBtn.Enabled = true;
                    configuraciónToolStripMenuItem.Enabled = true;
                    paramsBtn.Enabled = true;
                }
                
            }
            else {
                MessageBox.Show("Página no válida", "Página no válida", MessageBoxButtons.OK, MessageBoxIcon.Information);
                mostrarHtmlBtn.Enabled = false;
                configuraciónToolStripMenuItem.Enabled = false;
                paramsBtn.Enabled = false;
            }
        }

        /// <summary>
        /// Evento que salta al pulsar el botón Mostrar HTML
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void mostrarHtmlBtn_Click(object sender, EventArgs e)
        {
            VentanaHtml = new CodigoHtml(pagina);
            VentanaHtml.Show();
        }

        /// <summary>
        /// Evento que salta al pulsar el botón Config Params
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void paramsBtn_Click(object sender, EventArgs e)
        {
            if (VentanaConfig == null)
            {
                VentanaConfig = new TratarListaParams(pagina);
            }
 
            VentanaConfig.ShowDialog();
            if (VentanaConfig.DialogResult == DialogResult.OK)
            {
                btnStart.Enabled = true;
            }
            this.Show();
            this.TopMost = true;
            this.TopMost = false;
            
        }

        /// <summary>
        /// Menú superior
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void configuraciónToolStripMenuItem_Click(object sender, EventArgs e)
        {
            paramsBtn_Click(this, e);
        }

        /// <summary>
        /// Muestra el diálogo de Acerca de
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void acercaDeToolStripMenuItem_Click(object sender, EventArgs e)
        {

            AcercaDe AcercaDe = new AcercaDe();
            AcercaDe.Show();
        }

        /// <summary>
        /// Evento que salta al pulsar el botón Start
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnStart_Click(object sender, EventArgs e)
        {
            btnStart.Enabled = false;
            btnLimpiar.Enabled = false;
            cargarDireccion.Enabled = false;
            paramsBtn.Enabled = false;
            configuraciónToolStripMenuItem.Enabled = false;
            ListaForms = new List<Parser.formulario>();
            ListaForms = VentanaConfig.Parser.getListaDeFormularios();
            cadenaDis = VentanaConfig.Parser.getCadenaDis();
            configCharset = VentanaConfig.Parser.getConfigCharset();
            tipoIny = VentanaConfig.Parser.getTipoInyec();
            Inyeccion = new Inyeccion(ListaForms, direccionTxt, cadenaDis, EscritorXml, configCharset, VentanaLog, tipoIny);
            cargarDireccion.Enabled = true;
            btnLimpiar.Enabled = true;
            //Inicialización de objetos
            VentanaConfig = null;
            Inyeccion = null;
            ListaForms = null;
        }

        /// <summary>
        /// Imprime el mensaje entrante en el richTextBox
        /// </summary>
        /// <param name="mensaje"></param>
        public void printer (string mensaje){
            try
            {
                XMLrichTextBox.AppendText(mensaje);
                XMLrichTextBox.Select(XMLrichTextBox.Text.Length, 0);//Coloca el cursor al final del texto
            }
            catch { }
        }

        /// <summary>
        /// Muestra mensajes del tipo MessageBox
        /// </summary>
        /// <param name="mensaje"></param>
        /// <param name="txtBarra"></param>
        /// <param name="icono"></param>
        public void mensajes(string mensaje, string txtBarra, string icono)
        {
            if (icono == "informacion")
                MessageBox.Show(mensaje, txtBarra, MessageBoxButtons.OK, MessageBoxIcon.Information);
            else if (icono == "error")
            {
                MessageBox.Show(mensaje, txtBarra, MessageBoxButtons.OK, MessageBoxIcon.Error);
                cargarDireccion.Enabled = true;
            }
            else if (icono == "pregunta")
                MessageBox.Show(mensaje, txtBarra, MessageBoxButtons.YesNo, MessageBoxIcon.Question);

        }

        /// <summary>
        /// Muestra el diálogo Abrir
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void abritXMLToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
            this.openFileDialog1.Filter =
                "Xml files(*.XML)|*.XML|" +
                "Text files(*.TXT)|*.TXT|" +
                "All files (*.*)|*.*";
            this.openFileDialog1.Multiselect = false;
            this.openFileDialog1.Title = "Abrir XML";
            if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK &&
                openFileDialog1.FileName.Length > 0)
            {
                // Save the contents of the RichTextBox into the file.
                StreamReader sr = new StreamReader(openFileDialog1.FileName);
                XMLrichTextBox.Text = sr.ReadToEnd();
                //Cerrar el archivo
                sr.Close();
            }


        }


        /// <summary>
        /// Muestra el diálogo guardar
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void guardarXMLToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.saveFileDialog1 = new System.Windows.Forms.SaveFileDialog();
            this.saveFileDialog1.Filter =
                "Xml files(*.XML)|*.XML|" +
                "Text files(*.TXT)|*.TXT|" +
                "All files (*.*)|*.*";
            this.saveFileDialog1.Title = "Guardar XML";
            // Determine whether the user selected a file name from the saveFileDialog.
            if (saveFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK &&
               saveFileDialog1.FileName.Length > 0)
            {
                // Save the contents of the RichTextBox into the file.
                StreamWriter sw = new StreamWriter(saveFileDialog1.FileName);
                sw.Write(XMLrichTextBox.Text);
                //Cerrar el archivo
                sw.Close();
            }

        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void salirToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void acercaDeToolStripMenuItem_Click_1(object sender, EventArgs e)
        {
            AcercaDe AcercaDe = new AcercaDe();
            AcercaDe.ShowDialog();
        }

        /// <summary>
        /// Muestra el diálogo de Log
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnLog_Click(object sender, EventArgs e)
        {
            VentanaLog.Show();
        }

        /// <summary>
        /// Limpia el richTextBox
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnLimpiar_Click(object sender, EventArgs e)
        {
            XMLrichTextBox.Text = "";
        }

    }
}
